﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Configuration;
using System.Data.SqlClient;
using Website.Logger;
using UtilityExtensions;
using WebLib;
using System.Web.Script.Services;
using System.Web.Services;
using BOL;
using BOL.UI;
using BOL.Cliente;
using BOL.Ventas;
using DAL;


namespace UILGestion.VentaAdmin.DocumentoVenta
{
    public partial class NotaCreditoEditForm : System.Web.UI.Page
    {
        public NotaCreditoEditForm()
        {
            bol = new DocumentoVentaBL();
            lista = new ListValueBL();
            menuCliente = DbUtil.Db.Menus.Single(p => p.idInternal == 111);
        }

        [WebMethod(), ScriptMethod()]
        public static string GetCliente(String prefixText, String contextKey)
        {
           

            // no anulados  
            var p = (from a in DbUtil.Db.OrdenVentaItems

                     where (a.OrdenVenta.Cliente.descripcion).Contains(prefixText)
                     & a.OrdenVenta.idEstado!=10
                     & a.OrdenVenta.idProyecto == contextKey.ToInt()
                     select new ClienteUISearchInfo
                     {
                         idInternal = a.OrdenVenta.Cliente.idInternal,
                         descripcion = a.OrdenVenta.Cliente.descripcion,
                         numDocumento = a.OrdenVenta.Cliente.numDocumento,
                         correo = a.OrdenVenta.Cliente.email,
                         direccion = a.OrdenVenta.Cliente.Direccion.descripcion,
                         telefono = a.OrdenVenta.Cliente.telefono,
                         ui=a.idUI,
                         tipoDocumento = a.OrdenVenta.Cliente.TipoDocumento.abreviacion,
                         vista = String.Format("{0}:{1} {2} <b>({3}-{4})</b>", a.OrdenVenta.Cliente.TipoDocumento.abreviacion, a.OrdenVenta.Cliente.numDocumento, a.OrdenVenta.Cliente.descripcion,a.UI.UILocalizacion.descripcion,a.UI.descripcion),
                         uiDescripcion=a.UI.descripcion,
                         uiOrdenVentaItem=a.idInternal,
                         idOrdenVenta=a.idOrdenVenta,
                         ordenVenta=string.Format("OV-{0}",a.OrdenVenta.numDocumento),
                         clienteFormulario = "javascript:loadTabFromForm('tab{0}','{1}','{2}?Type=A&id={3}');".Fmt(menuCliente.idAplicacion,
                                                                                              menuCliente.Aplicacion.title,
                                                                                              menuCliente.url,
                                                                                              a.OrdenVenta.idCliente)
                     }).Take(35);

            var q = p.ToList();
            
            return Util.Tbl2Str(Util.EntidadToDataTable(q));

        }



       
        
        [WebMethod(), ScriptMethod()]
        public static string GETUI(String prefixText, String contextKey)
        {
            var p = (from a in DbUtil.Db.UIs
                     where (a.codigo + a.descripcion).Contains(prefixText) &
                     a.idEstado == 1
                     select new UISearchInfo
                     {
                         idInternal = a.idInternal,
                         localizacion = a.UILocalizacion.descripcion,
                         piso = a.UIBloque.descripcion,
                         codigo = a.codigo,
                         descripcion = a.descripcion,
                         moneda = a.Moneda.simbol,
                         precio = a.precio.ToString(),

                     }).Take(35);



            return Util.Tbl2Str(Util.EntidadToDataTable(p));

        }



        private static DAL.Menu menuCliente;
        private DocumentoVentaBL bol;
        ListValueBL lista;
        private string DOCUMENTOVENTAITEMINFO = "DocumentoVentaitemInfo";

        protected void Page_Load(object sender, EventArgs e)
        {
            clienteTXT.ChkVal = (string)Request.QueryString["idProyecto"];
            if (!Page.IsPostBack)
            {
                try
                {
                     type.Value = (string)Request.QueryString["type"];
                     internalID.Value = (string)Request.QueryString["id"];
                     idProyecto.Value = (string)Request.QueryString["idProyecto"];
                     idOrdenVentaItemTXT.Text = (string)Request.QueryString["idOrdenVentaItem"];
                     paginaAnt.Value = Page.Request.UrlReferrer.AbsoluteUri;
                     menuCtrl1.loadMenuVenta(idProyecto.Value.ToInt());
                     type.Value = (type.Value == String.Empty) ? "A" : type.Value;
                     idColeccionLista.Value = (string)Request.QueryString["idColeccion"];
                     FormatForm();

                }
                catch (SqlException sqlex)
                {
                    WebServerSideSqlError.Log(sqlex);

                    ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                     "uniqueKey" + DateTime.Now, "alert('" + sqlex.Message.Replace("'", "") + "');", true);


                }
                catch (Exception ex)
                {
                    WebServerSideError.Log(ex);
                    ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                         "uniqueKey" + DateTime.Now, "alert('" + ex.Message.Replace("'", "") + "');", true);

                }

            }
        }


        private void Insert()
        {
            List<DocumentoVentaitemInfo>  ds = (List<DocumentoVentaitemInfo>)Session[idColeccion.Value];
            internalID.Value = bol.Add(fechaTXT.Text.ToDate().Value,
                                       6,
                                        numDocumentoTXT.Text,
                                        idClienteTXT.Text.ToInt(),
                                       comentarioTXT.Text,
                                       idOrdenVentaItemTXT.Text.ToInt(),
                                       monedaDDL.SelectedValue.ToInt(),
                                       idProyecto.Value.ToInt(),
                                       ds
                                       ).ToString();

              }

        private void Update()
        {
            //DataSet ds = (DataSet)Session[idColeccion.Value];
            //bol.UpdateOrdenVenta(internalID.Value.ToInt(),
            //                copropietarioCHK.Checked,
            //                idCoClienteTXT.Text.ToInt(),
            //              formatoVentaDDL.SelectedValue.ToInt(),
            //                comentarioTXT.Text,
            //                bancoDDL.SelectedValue.ToInt(),
            //                 cuentaAhorroCHK.Checked,
            //                ds
            //                );

            
        }

        


        protected void button(object sender, EventArgs e)
        {
            
            try
            {

                if ((sender as Button).ID ==saveBTN.ID)
                {

                    if (type.Value == "E")   { Update(); }
                    if (type.Value == "A")    {Insert(); }

                    Response.Redirect("~/VentaAdmin/DocumentoVenta/DocumentoVentaReadForm.aspx?id={0}&idProyecto={2}".Fmt(internalID.Value, idEtapa.Value,idProyecto.Value), true);
                   

                }
                if ((sender as Button).ID == cancelarBTN.ID)
                {
                    Response.Redirect(paginaAnt.Value, true);
                }
                if ((sender as Button).ID ==refreshBTN.ID)
                {
                    FormatForm();
                }
                //if ((sender as Button).ID == AddConceptoBTN.ID)
                //{
                    
                //    PendientePagoPanel2.DataBind();
                //    AddDocumentoVentaModal.Show();
                //}
               


            }
            catch (SqlException sqlex)
            {
                WebServerSideSqlError.Log(sqlex);

                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                 "uniqueKey" + DateTime.Now, "alert('" + sqlex.Message.Replace("'", "") + "');", true);


            }
            catch (Exception ex)
            {
                WebServerSideError.Log(ex);
                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                     "uniqueKey" + DateTime.Now, "alert('" + ex.Message.Replace("'", "") + "');", true);

            }




        }
        private void ShowAllComboBox()
        {

            monedaDDL.DataValueField = "idInternal";
            monedaDDL.DataTextField = "descripcion";

            motivoDDL.DataValueField = "idInternal";
            motivoDDL.DataTextField = "descripcion";
           
           
            ListValueBL listas = new ListValueBL();
            //trae el detalle segun coresponda

            ListValueInfo todosCol = new ListValueInfo();
            todosCol.descripcion = "--------Seleccione Item---------";
            todosCol.idInternal = 0;

            
            monedaDDL.DataSource = listas.GetMoneda();
            monedaDDL.DataBind();

            motivoDDL.DataSource = listas.GetMotivoNotaCreditoVenta();
            motivoDDL.DataBind();

           
        }

        public void SetEstadistica()
        {

            List<DocumentoVentaitemInfo> item = (List<DocumentoVentaitemInfo>)Session[idColeccion.Value];

            

                totalLabel.Text = "0.00";
                montoInafectoLBL.Text="0.00";
                montoAfectoLBL.Text="0.00";
                totalIGVLBL.Text = "0.00";
                
                // segun la moneda de la venta
                if (item.Count()>0)
                {
                    
                totalLabel.Text = item.Sum(p=>p.total).ToString("N");
                montoInafectoLBL.Text=item.Sum(p=>p.subTotal).ToString("N");
                montoAfectoLBL.Text = item.Sum(p => p.subTotal).ToString("N");
                totalIGVLBL.Text = item.Sum(p => p.IGVTotal).ToString("N");
                }

              
                totalUPNL.Update();
        }

        
        private void LoadItemRef(int idParent)
        {
            var ordenVentaItemList = bol.GetDocumentoVentaRef(idParent);
            Session[idColeccionRef.Value] = ordenVentaItemList;
        }
        private void LoadItem(int idParent)
        {

            var ordenVentaItemList = bol.GetDocumentoVentaItem(idParent);
            Session[idColeccion.Value] = ordenVentaItemList;
        }
     

        private void Load()
        {

            //----- nota de credito
            DAL.DocumentoVenta documentoVenta = DbUtil.Db.DocumentoVentas.Single(p => p.idInternal == internalID.Value.ToInt());

            fechaTXT.Text = documentoVenta.fecha.ToShortDateString();
            numDocumentoTXT.Text = documentoVenta.numeroDoc;
            monedaDDL.SelectedValue=documentoVenta.idMoneda.ToString();
            motivoDDL.SelectedValue = documentoVenta.idMotivoNota.ToString();
            comentarioTXT.Text = documentoVenta.comentario;


            //montoInafectoLBL
            //    montoAfectoLBL
            //    totalIGVLBL
            //        totalLabel


            LoadClienteFromOrdenVenta(documentoVenta.OrdenVentaItem);


            //set el DATASET
            LoadItem(int.Parse(internalID.Value));
            //DocumentoVentaItemGrid1.Load(idColeccion.Value.ToInt(), internalID.Value.ToInt(), documentoVenta.ConceptoItem.descripcion);

        }


        private void LoadClienteFromOrdenVenta(DAL.OrdenVentaItem ordenVentaitem)
        {
            if (ordenVentaitem != null)
            {
                
                DAL.Menu menuCliente = DbUtil.Db.Menus.Single(p => p.idInternal == 111);//cliente
                DAL.Menu menuOrdenVenta = DbUtil.Db.Menus.Single(p => p.idInternal == 111);//ordenVenta


                //------------cliente
                var cliente = ordenVentaitem.OrdenVenta.Cliente;
                idClienteTXT.Text = cliente.idInternal.ToString();
                clienteHLK.Text=cliente.descripcion;
                docClienteTXT.Text=cliente.TipoDocumento.abreviacion;
                numDocClienteTXT.Text=cliente.numDocumento;
                direccionTXT.Text=cliente.Direccion.descripcion;
                //---------------------
                string val = String.Format("{0}?Type=A&id={1}",
                                                              menuCliente.url,
                                                              cliente.idInternal);

                clienteHLK.Text = cliente.descripcion;
                clienteHLK.NavigateUrl = "javascript:loadTabFromForm('tab{0}','{1}','{2}');".Fmt(menuCliente.idAplicacion,
                                                                                                  menuCliente.Aplicacion.title,
                                                                                                  val);
                //------------------------orden  de Venta
                UITXT.Text=ordenVentaitem.UI.descripcion;
                idOrdenVentaItemTXT.Text = ordenVentaitem.idInternal.ToString();
                ordenVentaHLK.Text=ordenVentaitem.OrdenVenta.numDocumento;
                ordenVentaHLK.NavigateUrl = 
                    string.Format("{0}?id={1}&idProyecto={2}", menuOrdenVenta.url, 
                                                                ordenVentaitem.idOrdenVenta, 
                                                                idProyecto.Value);
                
              

            }
        }
       

        private void FormatForm()
        {

            //--------------------
            //int idEmpleadoEmisor = int.Parse(System.Web.HttpContext.Current.Session["idEmpleado"].ToString());
            //bool acceso = new DAL.FormularioAcceso().VerificarAcceso(DbUtil.Db,
            //    idEmpleadoEmisor,
            //    11, //Proveeedor
            //    2); //lectura
            ////------------------------- 
            //// los paneles presentes en el formulario
            //pnlMain.Visible = true;
            ShowAllComboBox();
                
            //areTXT.Text="0.00";
            idColeccion.Value = Parametros.GenerarID().ToString();
            idColeccionRef.Value = Parametros.GenerarID().ToString();

            if (type.Value == "E")
            {
                Load();
               
                
            }
            if (type.Value == "A")
            {
                fechaTXT.Text = DateTime.Now.ToShortDateString();
                comentarioTXT.Text = string.Empty;
                DocumentoVentaItemGrid1.showFooter();
                totalLabel.Text = "0.00";
                
                // set cliente para busquedas y navegacion
               
                //set para ordenVenta 
                clienteHLK.NavigateUrl = "javascript:loadTabFromForm('tab{0}','{1}','{2}?Type=A&id=XXX');".Fmt(menuCliente.idAplicacion,
                                                                                                  menuCliente.Aplicacion.title,
                                                                                                  menuCliente.url);

                LoadItem(internalID.Value.ToInt());  // para en caso del esquema
                //caso de saber la OVItem

                 
                }

                if (idColeccionLista.Value.ToInt() != 0)
                {
                    var lista = (List<int>)Session[idColeccionLista.Value];
                    DAL.OrdenVentaFormato ordenVentaConcepto = DbUtil.Db.OrdenVentaFormatos.Single(p => p.idInternal == lista.First().ToInt());
                    LoadClienteFromOrdenVenta(ordenVentaConcepto.OrdenVentaItem);
                    
                    monedaDDL.SelectedValue = ordenVentaConcepto.OrdenVentaItem.idMoneda.ToString();
                    simbol1LBL.Text = ordenVentaConcepto.OrdenVentaItem.Moneda.simbol;
                    simbol2LBL.Text = ordenVentaConcepto.OrdenVentaItem.Moneda.simbol;
                    simbol3LBL.Text = ordenVentaConcepto.OrdenVentaItem.Moneda.simbol;
                    simbol4LBL.Text = ordenVentaConcepto.OrdenVentaItem.Moneda.simbol;
                    foreach (var item in lista)
                    {
                        var ordenVetaFormato = DbUtil.Db.OrdenVentaFormatos.Single(p => p.idInternal == item);
                        DocumentoVentaItemGrid1.LoadFromOrdenVentaFormato(idColeccion.Value.ToInt(), 
                                                    internalID.Value.ToInt(),
                                                    ordenVetaFormato);

                    };

                }
                
                

                int idEmpleadoEmisor = int.Parse(System.Web.HttpContext.Current.Session["idEmpleado"].ToString());
                vendedorLBL.Text = DbUtil.Db.Empleados.Single(p => p.idInternal == idEmpleadoEmisor).descripcion;
                Setfolio();
               
            }

       
        private void Setfolio()
        {
            var q = DbUtil.Db.Folios.Where(p =>
                                                p.idProyecto == idProyecto.Value.ToInt() &
                                                p.idDocumentoTipo == 6 &
                                                p.bitActivo == true);

            if (q.Count() == 0)
            {
                throw new Exception("No existe Registro de Folio");
            }

            var w = DbUtil.Db.DocumentoVentas.Where(p => p.idProyecto == idProyecto.Value.ToInt() 
                                                        & p.idDocumentoTipo == 6
                                                        & p.bitAnulado == false);
            
            int numero = (w.Count() > 0) ? w.Max(l => l.numeroDoc).ToInt() : q.First().Inicio;

            Folio folio = q.First();
            serieTXT.Text = folio.serie;
            numDocumentoTXT.Text = "{0}".Fmt(folio.GetActualwithFormato(numero + 1));
        }



         protected void AddItem(object sender, EventArgs e)
        {
            try
            {

                

                TextBox codigoTXT = ((TextBox)itemGridView.FooterRow.FindControl("codigoEditTextBox"));
                TextBox descripcionTextBox = ((TextBox)itemGridView.FooterRow.FindControl("descripcionEditTextBox"));
                TextBox totalTextBox = ((TextBox)itemGridView.FooterRow.FindControl("totalTextBox"));
                
                DataSet lista = (DataSet)Session[idColeccion.Value];

             
                //var ordenCompraItemInfo = bol.GetOrdenCompraItemFromValor(_db, insumo.idInternal,
                //                                                   cantidadTextBox.Text.ToDecimal().Value,
                //                                                    IGVvalor,
                //                                                    IGVCheckBox.Checked,
                //                                                    true,//oc siempre calcula el IGV
                //                                                    IGVCheckBox.Checked == true ? precioIGVETextBox.Text.ToDecimal().Value :
                //                                                                               precioTextBox.Text.ToDecimal().Value,
                //                                                    IGVCheckBox.Checked == true ? subMontoIGVTextBox.Text.ToDecimal().Value :
                //                                                                               subMontoTextBox.Text.ToDecimal().Value);


                //lista.Tables[bol.ORDENCOMPRAITEMINFO].ImportRow(Util.EntidadToDataRow(ordenCompraItemInfo));
                //Session[idobjectdsLabel.Value.ToString()] = lista;

                //BindDataItem();
                //SetTotales();

            }
            catch (SqlException sqlex)
            {
                WebServerSideSqlError.Log(sqlex);
                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                 "uniqueKey" + DateTime.Now, "alert('" + sqlex.Message.Replace("'", "") + "');", true);


            }
            catch (Exception ex)
            {
                WebServerSideError.Log(ex);
                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                 "uniqueKey" + DateTime.Now, "alert('" + ex.Message.Replace("'", "") + "');", true);

            }

        }
       

        protected void DDL(object sender, EventArgs e)
        {
            try
            {
                //if (((DropDownList)sender).ID == tipoDocumentoDDL.ID)
                //{
                //    if (tipoDocumentoDDL.SelectedValue.ToInt() > 0)
                //    {
                //        SetNumeroFolio();
                //    }
                //}
               




            }
            catch (SqlException sqlex)
            {
                WebServerSideSqlError.Log(sqlex);

                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                 "uniqueKey" + DateTime.Now, "alert('" + sqlex.Message.Replace("'", "") + "');", true);
            }
            catch (Exception ex)
            {
                WebServerSideError.Log(ex);
                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                     "uniqueKey" + DateTime.Now, "alert('" + ex.Message.Replace("'", "") + "');", true);

            }


        }

   
    }
}